GEMI – Global Environmental Monitoring Index

GEMI is a vegetation-oriented spectral index designed to reduce atmospheric and soil background effects, making it suitable for large-scale environmental monitoring over wide regions.

1. Scientific Definition

The Global Environmental Monitoring Index (GEMI) is a nonlinear spectral index that combines Red and Near-InfraRed (NIR) reflectance to monitor vegetation while being less sensitive to atmospheric effects and soil background than simple indices such as NDVI.

Formula

GEMI is usually computed in two steps:

η = (2(NIR² − Red²) + 1.5·NIR + 0.5·Red) / (NIR + Red + 0.5)

GEMI = η · (1 − 0.25·η) − (Red − 0.125) / (1 − Red) Dimensionless (≈ −1 to +1)

NIR and Red are surface reflectance values (0–1). GEMI behaves similarly to NDVI in highlighting vegetation, but with reduced sensitivity to atmospheric variations and soil background.

Typical Interpretation

GEMI Range Interpretation
< 0.0 Water, clouds, snow, or non-vegetated bright surfaces
0.0 – 0.2 Bare soil, rocks, built-up, or very sparse vegetation
0.2 – 0.5 Moderate vegetation (grassland, shrubland, mixed cover)
> 0.5 Dense and healthy vegetation (croplands, forests with high biomass)

Key Applications

  • Global and regional vegetation monitoring
  • Environmental change detection and land degradation studies
  • Large-scale land cover / land use assessments
  • Complementary analysis to NDVI in areas with strong soil/background influence

2. Data & Bands for GEMI

Common Sensors & Bands

  • Sentinel-2 (ESA) – 10 m
    • Red: B4 (~665 nm)
    • NIR: B8 (~842 nm)
  • Landsat 8/9 OLI – 30 m
    • Red: B4
    • NIR: B5

Good Practice

  • Use atmospherically corrected surface reflectance products (e.g. COPERNICUS/S2_SR).
  • Filter images by date range and cloud percentage (e.g. < 20–30%).
  • Mask clouds and cloud shadows using the QA bands or cloud probability bands when available.
  • Clip the final GEMI raster to your Area of Interest (AOI) before exporting.

Palette Suggestion

A GEMI color palette similar to NDVI: [ "#440154", "#3b528b", "#21908c", "#5dc963", "#fde725" ]

3. Google Earth Engine Code – GEMI (Sentinel-2)

This script computes GEMI from Sentinel-2 surface reflectance for any drawn AOI. Steps: draw your geometry in the Code Editor, set date range, run, then export GEMI as GeoTIFF.


// -------------------------------------------------------
// GEMI – Global Environmental Monitoring Index (Sentinel-2)
// Start4IT – GIS & Remote Sensing
// -------------------------------------------------------

// 1. Define Area of Interest (AOI)
// Draw a polygon/rectangle in the Code Editor and rename it to "geometry"
var roi = geometry;

// 2. Define date range
var startDate = '2023-01-01';
var endDate   = '2023-12-31';

// 3. Load Sentinel-2 Surface Reflectance collection
var s2 = ee.ImageCollection('COPERNICUS/S2_SR')
  .filterBounds(roi)
  .filterDate(startDate, endDate)
  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
  .select(['B4', 'B8']);  // Red, NIR

// 4. Create a median composite and clip to AOI
var image = s2.median().clip(roi);

// 5. Compute GEMI
// Step 1: compute η (eta)
var eta = image.expression(
  '(2.0 * (NIR * NIR - RED * RED) + 1.5 * NIR + 0.5 * RED) / (NIR + RED + 0.5)',
  {
    'NIR': image.select('B8'),
    'RED': image.select('B4')
  }
);

// Step 2: compute GEMI
var gemi = image.expression(
  'ETA * (1.0 - 0.25 * ETA) - (RED - 0.125) / (1.0 - RED)',
  {
    'ETA': eta,
    'RED': image.select('B4')
  }
).rename('GEMI');

// 6. Visualization
var gemiVis = {
  min: -1,
  max: 1,
  palette: [
    '#440154', // low
    '#3b528b',
    '#21908c',
    '#5dc963',
    '#fde725'  // high
  ]
};

// 7. Add layers to the map
Map.centerObject(roi, 10);
Map.addLayer(gemi, gemiVis, 'GEMI (Sentinel-2)', true);

// Optional: true color composite for context
var s2_rgb = ee.ImageCollection('COPERNICUS/S2_SR')
  .filterBounds(roi)
  .filterDate(startDate, endDate)
  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
  .select(['B4', 'B3', 'B2'])  // RGB
  .median()
  .clip(roi);

Map.addLayer(s2_rgb, {min: 0, max: 3000}, 'True Color (RGB)', false);

// 8. Export GEMI as GeoTIFF to Google Drive
Export.image.toDrive({
  image: gemi,
  description: 'GEMI_Export',
  fileNamePrefix: 'GEMI_Export',
  region: roi,
  scale: 10,       // 10 m for Sentinel-2 B8/B4
  crs: 'EPSG:4326',
  maxPixels: 1e13
});

// End of script